/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dvd.gestionnaires;

import acteur.modeles.Acteur;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
import java.util.Collection;  
import javax.ejb.Stateless;  
import javax.persistence.EntityManager;  
import javax.persistence.PersistenceContext;  
import javax.persistence.Query;  
import dvd.modeles.Dvd;  
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import realisateur.modeles.Realisateur;
import realisateur.gestionnaires.GestionnaireRealisateur;

/**
 *
 * @author Marcouss&Ln
 */
@Stateless
@LocalBean
public class GestionnaireDvd {

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
    @PersistenceContext  
    private EntityManager em;  
    
    
    public void creerDvdTest(List<Collection<Realisateur>> cr1, List<Collection<Acteur>> ac1){
        System.out.println("testing dvds");
        creerDvd("Matrix",cr1.get(0),ac1.get(0),1999,"Action","Dans un monde où tout ce qui semble réel est en fait élaboré par l'univers électronique baptisé la Matrice, Néo, un programmeur, est contacté par un certain Morpheüs.","images/movies/Matrix.jpg",9.99,3);
        creerDvd("Matrix Revolutions",cr1.get(0),ac1.get(0),2003,"Action","Alors que Néo, l'inutile Elu, est dans le coma, la guerre entre les soldats de Zion et les Machines fait rage. Smith, qui a réussi à infiltrer la Resistance, est devenu si puissant qu'il représente même un danger pour la Matrice.","images/movies/Matrix_revolution.jpg",6.99,3);
        creerDvd("Star Wars IV",cr1.get(1),ac1.get(2),1977,"Fantastique","Il y a bien longtemps, dans une galaxie très lointaine... La guerre civile fait rage entre l'Empire galactique et l'Alliance rebelle.","images/movies/starwars4.jpg",7.99,3);
        creerDvd("Avatar",cr1.get(4),ac1.get(3),2009,"Aventure","Malgré sa paralysie, Jake Sully, un ancien marine immobilisé dans un fauteuil roulant, est resté un combattant au plus profond de son être. Il est recruté pour se rendre à des années-lumière de la Terre, sur Pandora.","images/movies/avatar.jpg",9.99,3);
        creerDvd("Star Wars I",cr1.get(1),ac1.get(1),1999,"Fantastique","Avant de devenir un célèbre chevalier Jedi, et bien avant de se révéler l’âme la plus noire de la galaxie, Anakin Skywalker est un jeune esclave sur la planète Tatooine. La Force est déjà puissante en lui et il est un remarquable pilote de Podracer.","images/movies/starwars1.jpg",6.99,3);
        creerDvd("Star Wars II",cr1.get(1),ac1.get(1),2002,"Fantastique","Depuis le blocus de la planète Naboo par la Fédération du commerce, la République, gouvernée par le Chancelier Palpatine, connaît une véritable crise.","images/movies/starwars2.jpg",7.99,3);
        creerDvd("Star Wars III",cr1.get(1),ac1.get(1),2005,"Fantastique","La Guerre des Clones fait rage. Une franche hostilité oppose désormais le Chancelier Palpatine au Conseil Jedi. Anakin Skywalker, jeune Chevalier Jedi pris entre deux feux, hésite sur la conduite à tenir.","images/movies/starwars3.jpg",9.99,3);
        creerDvd("Star Wars V",cr1.get(2),ac1.get(2),1980,"Fantastique","Malgré la destruction de l'Etoile Noire, l'Empire maintient son emprise sur la galaxie, et poursuit sans relâche sa lutte contre l'Alliance rebelle. Basés sur la planète glacée de Hoth, les rebelles essuient un assaut des troupes impériales.","images/movies/starwars5.jpg",6.99,3);
        creerDvd("Star Wars VI",cr1.get(3),ac1.get(2),1983,"Fantastique","L'Empire galactique est plus puissant que jamais : la construction de la nouvelle arme, l'Etoile de la Mort, menace l'univers tout entier.","images/movies/starwars6.jpg",7.99,3);
        creerDvd("Sexy Dance",cr1.get(5),ac1.get(4),2006,"Comédie","Condamné pour avoir saccagé une école d'art avec ses copains, Tyler Gage, un jeune délinquant de Baltimore, doit effectuer des travaux d'intéret général dans l'établissement.","images/movies/sexydance.jpg",9.99,3);
        creerDvd("Paranormal Activity",cr1.get(6),ac1.get(5),2007,"Horreur","Un jeune couple suspecte leur maison d'être hantée par un esprit démoniaque. Ils décident alors de mettre en place une surveillance vidéo durant leur sommeil afin d'enregistrer les évènements nocturnes dont ils sont les victimes.","images/movies/paranormal.jpg",6.99,3);
        creerDvd("Men in Black",cr1.get(7),ac1.get(6),1997,"Action","Chargés de protéger la Terre de toute infraction extraterrestre et de réguler l'immigration intergalactique sur notre planète, les Men in black ou MIB opèrent dans le plus grand secret.","images/movies/meninblack.jpg",7.99,3);
        creerDvd("L'âge de Glace",cr1.get(8),ac1.get(7),2002,"Animation","Vingt mille ans avant notre ère, lorsque Scrat, un rongeur obstiné, fend la banquise et déclenche un nouvel Age de Glace, une vaste cohorte de mammifères s'assemble et commence à émigrer vers le sud.","images/movies/agedeglace.jpg",9.99,3);
        creerDvd("Shrek",cr1.get(9),ac1.get(8),2001,"Animation","Shrek, un ogre verdâtre, cynique et malicieux, a élu domicile dans un marécage qu'il croit être un havre de paix. Un matin, alors qu'il sort faire sa toilette, il découvre de petites créatures agaçantes qui errent dans son marais.","images/movies/shrek.jpg",6.99,3);
        creerDvd("Vol au dessus d'un nid de coucou",cr1.get(10),ac1.get(9),1975,"Drame","Rebellion dans un hôpital psychiatrique à l'instigation d'un malade qui se révolte contre la dureté d'une infirmière.","images/movies/coucou.jpg",7.99,3);
        creerDvd("L'homme qui murmurait à l'oreille des chevaux",cr1.get(11),ac1.get(10),1998,"Romance","Profondement marquée par un accident qui a couté la vie à sa meilleure amie et causé d'irréparables lésions à son cheval, Grace MacLean, jeune fille de quatorze ans, vit repliée sur elle-même renonçant à lutter contre l'infirmité.","images/movies/chevaux.jpg",9.99,3);
        creerDvd("La ligne verte",cr1.get(12),ac1.get(11),1999,"Drame","Paul Edgecomb, pensionnaire centenaire d'une maison de retraite, est hanté par ses souvenirs. Gardien-chef du pénitencier de Cold Mountain en 1935, il était chargé de veiller au bon déroulement des exécutions capitales.","images/movies/ligneverte.jpg",6.99,3);
        creerDvd("Armageddon",cr1.get(13),ac1.get(12),1998,"Action","Un astéroide se dirige vers la Terre à la vitesse de 35.000 kilomètres a l'heure. Harry S. Stamper, grand spécialiste du forage pétrolier, est recruté par le directeur de la NASA pour tenter de le détruire.","images/movies/armageddon.jpg",7.99,3);
        creerDvd("Le cinquième élément",cr1.get(14),ac1.get(13),1997,"Science Fiction","Au XXIII siècle, dans un univers étrange et coloré, ou tout espoir de survie est impossible sans la découverte du cinquième élément, un héros affronte le mal pour sauver l'humanité.","images/movies/5element.jpg",9.99,3);
        creerDvd("Troie",cr1.get(15),ac1.get(14),2004,"Péplum","Dans la Grèce antique, l'enlèvement d'Hélène, reine de Sparte, par Paris, prince de Troie, est une insulte que le roi Ménélas ne peut supporter.","images/movies/troie.jpg",6.99,3);
        creerDvd("Pearl Harbor",cr1.get(13),ac1.get(15),2001,"Guerre","Amis depuis la plus tendre enfance, Rafe McCawley et Danny Walker sont deux brillants pilotes de l'armée de l'air américaine. La Seconde Guerre mondiale a commencé, mais les Etats-Unis n'ont pas encore engagé les hostilités.","images/movies/harbor.jpg",7.99,3);
        /*for(Realisateur r : cr1){
            System.out.println(r.getNom());
        }
        for(Acteur a : ac1){
            System.out.println(a.getNom());
        }*/
            
    }
    
    
    
    public void peupleLaBaseDvdAvecJeuDeTest(){
        creerDvd("Matrix",1999,"Action","Dans un monde où tout ce qui semble réel est en fait élaboré par l'univers électronique baptisé la Matrice, Néo, un programmeur, est contacté par un certain Morpheüs.","images/movies/Matrix.jpg",9.99,3);
        creerDvd("Matrix Revolutions",2003,"Action","Alors que Néo, l'inutile Elu, est dans le coma, la guerre entre les soldats de Zion et les Machines fait rage. Smith, qui a réussi à infiltrer la Resistance, est devenu si puissant qu'il représente même un danger pour la Matrice.","images/movies/Matrix_revolution.jpg",6.99,3);
        creerDvd("Star Wars IV",1977,"Fantastique","Il y a bien longtemps, dans une galaxie très lointaine... La guerre civile fait rage entre l'Empire galactique et l'Alliance rebelle.","images/movies/starwars4.jpg",7.99,3);
        creerDvd("Avatar",2009,"Aventure","Malgré sa paralysie, Jake Sully, un ancien marine immobilisé dans un fauteuil roulant, est resté un combattant au plus profond de son être. Il est recruté pour se rendre à des années-lumière de la Terre, sur Pandora.","images/movies/avatar.jpg",9.99,3);
        creerDvd("Star Wars I",1999,"Fantastique","Avant de devenir un célèbre chevalier Jedi, et bien avant de se révéler l’âme la plus noire de la galaxie, Anakin Skywalker est un jeune esclave sur la planète Tatooine. La Force est déjà puissante en lui et il est un remarquable pilote de Podracer.","images/movies/starwars1.jpg",6.99,3);
        creerDvd("Star Wars II",2002,"Fantastique","Depuis le blocus de la planète Naboo par la Fédération du commerce, la République, gouvernée par le Chancelier Palpatine, connaît une véritable crise.","images/movies/starwars2.jpg",7.99,3);
        creerDvd("Star Wars III",2005,"Fantastique","La Guerre des Clones fait rage. Une franche hostilité oppose désormais le Chancelier Palpatine au Conseil Jedi. Anakin Skywalker, jeune Chevalier Jedi pris entre deux feux, hésite sur la conduite à tenir.","images/movies/starwars3.jpg",9.99,3);
        creerDvd("Star Wars V",1980,"Fantastique","Malgré la destruction de l'Etoile Noire, l'Empire maintient son emprise sur la galaxie, et poursuit sans relâche sa lutte contre l'Alliance rebelle. Basés sur la planète glacée de Hoth, les rebelles essuient un assaut des troupes impériales.","images/movies/starwars5.jpg",6.99,3);
        creerDvd("Star Wars VI",1983,"Fantastique","L'Empire galactique est plus puissant que jamais : la construction de la nouvelle arme, l'Etoile de la Mort, menace l'univers tout entier.","images/movies/starwars6.jpg",7.99,3);
        creerDvd("Sexy Dance",2006,"Comédie","Condamné pour avoir saccagé une école d'art avec ses copains, Tyler Gage, un jeune délinquant de Baltimore, doit effectuer des travaux d'intéret général dans l'établissement.","images/movies/sexydance.jpg",9.99,3);
        creerDvd("Paranormal Activity",2007,"Horreur","Un jeune couple suspecte leur maison d'être hantée par un esprit démoniaque. Ils décident alors de mettre en place une surveillance vidéo durant leur sommeil afin d'enregistrer les évènements nocturnes dont ils sont les victimes.","images/movies/paranormal.jpg",6.99,3);
        creerDvd("Men in Black",1997,"Action","Chargés de protéger la Terre de toute infraction extraterrestre et de réguler l'immigration intergalactique sur notre planète, les Men in black ou MIB opèrent dans le plus grand secret.","images/movies/meninblack.jpg",7.99,3);
        creerDvd("L age de Glace",2002,"Animation","Vingt mille ans avant notre ère, lorsque Scrat, un rongeur obstiné, fend la banquise et déclenche un nouvel Age de Glace, une vaste cohorte de mammifères s'assemble et commence à émigrer vers le sud.","images/movies/agedeglace.jpg",9.99,3);
        creerDvd("Shrek",2001,"Animation","Shrek, un ogre verdâtre, cynique et malicieux, a élu domicile dans un marécage qu'il croit être un havre de paix. Un matin, alors qu'il sort faire sa toilette, il découvre de petites créatures agaçantes qui errent dans son marais.","images/movies/shrek.jpg",6.99,3);
        creerDvd("Vol au dessus d un nid de coucou",1975,"Drame","Rebellion dans un hôpital psychiatrique à l'instigation d'un malade qui se révolte contre la dureté d'une infirmière.","images/movies/coucou.jpg",7.99,3);
        creerDvd("L homme qui murmurait à l oreille des chevaux",1998,"Romance","Profondement marquée par un accident qui a couté la vie à sa meilleure amie et causé d'irréparables lésions à son cheval, Grace MacLean, jeune fille de quatorze ans, vit repliée sur elle-même renonçant à lutter contre l'infirmité.","images/movies/chevaux.jpg",9.99,3);
        creerDvd("La ligne verte",1999,"Drame","Paul Edgecomb, pensionnaire centenaire d'une maison de retraite, est hanté par ses souvenirs. Gardien-chef du pénitencier de Cold Mountain en 1935, il était chargé de veiller au bon déroulement des exécutions capitales.","images/movies/ligneverte.jpg",6.99,3);
        creerDvd("Armageddon",1998,"Action","Un astéroide se dirige vers la Terre à la vitesse de 35.000 kilomètres a l'heure. Harry S. Stamper, grand spécialiste du forage pétrolier, est recruté par le directeur de la NASA pour tenter de le détruire.","images/movies/armageddon.jpg",7.99,3);
        creerDvd("Le cinquième élément",1997,"Science Fiction","Au XXIII siècle, dans un univers étrange et coloré, ou tout espoir de survie est impossible sans la découverte du cinquième élément, un héros affronte le mal pour sauver l'humanité.","images/movies/5element.jpg",9.99,3);
        creerDvd("Troie",2004,"Péplum","Dans la Grèce antique, l'enlèvement d'Hélène, reine de Sparte, par Paris, prince de Troie, est une insulte que le roi Ménélas ne peut supporter.","images/movies/troie.jpg",6.99,3);
        creerDvd("Pearl Harbor",2001,"Guerre","Amis depuis la plus tendre enfance, Rafe McCawley et Danny Walker sont deux brillants pilotes de l'armée de l'air américaine. La Seconde Guerre mondiale a commencé, mais les Etats-Unis n'ont pas encore engagé les hostilités.","images/movies/harbor.jpg",7.99,3);       
    }
    
    
    
    public Dvd creerDvd(String titre,Collection<Realisateur> real,Collection<Acteur> ac,int annee,String genre,String description,String photo,double prix,int stock){
        Dvd d = new Dvd(titre,real,ac,annee,genre,description,photo,prix,stock);
        em.persist(d);
        return d;
    }
    
    public Dvd creerDvd(String titre,int annee,String genre,String description,String photo,double prix,int stock){
        Dvd d = new Dvd(titre,annee,genre,description,photo,prix,stock);
        em.persist(d);
        return d;
    }
        
    
    public Collection<Dvd> getAllDvd(int x,int page) {  
        // Exécution d'une requête équivalente à un select * 
        
        Query q = em.createQuery("select d from Dvd d");  
        q.setMaxResults(x);
        System.out.println("fini testing DVD"); 
        q.setFirstResult(((page-1)*x)+1);
        return q.getResultList();  
    }  
    
    public Collection<Dvd> getAllDvd2() {  
        
        Query q = em.createQuery("select d from Dvd d");
        return q.getResultList();  
    }  
    
    
    /*public Collection<Realisateur> getRealisateur(int id) {
        Query q = em.createQuery("select r from Realisateur r where r.id='" + id +"'");
        return  q.getResultList();
    }*/
    
    
    public Dvd getDvd(int id){
        System.out.println("in getDvd");
        Query q = em.createQuery("select d from Dvd d where d.id='" + id +"'");
        return (Dvd)q.getSingleResult();
    }
    
    public Dvd getDvd2(String titre){
        System.out.println("in getDvd2");
        Query q = em.createQuery("select d from Dvd d where d.titre='" + titre +"'");
        return (Dvd) q.getSingleResult();
    }
    
    public int getPageTotal(){
        Query q = em.createQuery("select d from Dvd d");
        int total = q.getResultList().size();
        return total;
    }
    
    public Collection<Dvd> getDvdBy(String text,String carac){
        Query q = em.createQuery("select d from Dvd d where d."+carac+" LIKE '%" + text +"%'");
        return q.getResultList();
    }
    
     public void deduceStockDvd(int idDvd, int qtty){
        Query q = em.createQuery("UPDATE Dvd d SET d.stock = d.stock -" + qtty +" WHERE d.id = '" + idDvd + "'");
        //"UPDATE Employee e SET e.salary = e.salary + 100 WHERE e.name = :name");
        q.executeUpdate();
    }
    
    public Collection<Dvd> getDvdByYear(String text){
        Query q = em.createQuery("select d from Dvd d where d.annee =" + text);
        return q.getResultList();
    }

    
    public Collection<Dvd> getDvdByActor(String text){
        //Query q = em.createQuery("select d from Dvd d, Acteur a, Dvd_Acteur da where da.Dvd_id = d.id and da.Listacteur_id = a.id and (a.nom LIKE '%" + text +"%' or a.prenom LIKE '%" + text +"%')");
        //return q.getResultList();
        Collection<Dvd> d = new ArrayList<Dvd>();
        Query q = em.createQuery("select a from Acteur a where a.nom LIKE '%" + text +"%' or a.prenom LIKE '%" + text +"%'");
        Collection<Acteur> ac = q.getResultList();
    
        for(Dvd dvd : getAllDvd2()){
            for(Acteur a : dvd.getListActeur()){
                for(Acteur a2 : ac){
                    if(a2.equals(a)){
                        d.add(dvd);
                    }
                }
            }
        }
        
        return d;
    }
    
    
    public Collection<Dvd> getDvdByDirector(String text){
        Collection<Dvd> d = new ArrayList<Dvd>();
        Query q = em.createQuery("select r from Realisateur r where r.nom LIKE '%" + text +"%' or r.prenom LIKE '%" + text +"%'");
        Collection<Realisateur> real = q.getResultList();
    
        for(Dvd dvd : getAllDvd2()){
            for(Realisateur r : dvd.getListRealisateur()){
                for(Realisateur r2 : real){
                    if(r2.equals(r)){
                        d.add(dvd);
                    }
                }
            }
        }
        
        return d;
    }
    
        
    public Collection<Dvd> getDvdGenre(String genre){
        System.out.println("in getDvdGenre = " + genre);
        Query q;
        if(genre.equals("SF")){
            q = em.createQuery("select d from Dvd d where d.genre = 'Science Fiction'");
        }else if(genre.equals("Comedie")){
            q = em.createQuery("select d from Dvd d where d.genre = 'Comédie'");
        }else if(genre.equals("Peplum")){
            q = em.createQuery("select d from Dvd d where d.genre = 'Péplum'");
        }else{
            q = em.createQuery("select d from Dvd d where d.genre = '" + genre +"'");
        }
        return q.getResultList();
    }
    
    
    public Collection<Dvd> getDvdTitre(String titre){
        System.out.println("in getDvdTitre = " + titre);
        Query q;
        if(titre.equals("StarWarsI")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Star Wars I'");
        }else if(titre.equals("StarWarsII")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Star Wars II'");
        }else if(titre.equals("StarWarsIII")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Star Wars III'");
        }else if(titre.equals("StarWarsIV")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Star Wars IV'");
        }else if(titre.equals("StarWarsV")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Star Wars V'");
        }else if(titre.equals("StarWarsVI")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Star Wars VI'");
        }else if(titre.equals("MatrixRevolutions")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Matrix Revolutions'");
        }else if(titre.equals("Laligneverte")){
            q = em.createQuery("select d from Dvd d where d.titre = 'La ligne verte'");
        }else if(titre.equals("PearlHarbor")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Pearl Harbor'");
        }else if(titre.equals("MenInBlack")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Men in Black'");
        }else if(titre.equals("5elmt")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Le cinquième élément'");
        }else if(titre.equals("Murmure")){
            q = em.createQuery("select d from Dvd d where d.titre = 'L''homme qui murmurait à l''oreille des chevaux'");
        }else if(titre.equals("Coucou")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Vol au dessus d''un nid de coucou'");
        }else if(titre.equals("AgeGlace")){
            q = em.createQuery("select d from Dvd d where d.titre = 'L''âge de Glace'");
        }else if(titre.equals("Paranormal")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Paranormal Activity'");
        }else if(titre.equals("SexyDance")){
            q = em.createQuery("select d from Dvd d where d.titre = 'Sexy Dance'");
        }else{
            q = em.createQuery("select d from Dvd d where d.titre = '" + titre +"'");
        }
        return q.getResultList();
    }

    
}